iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
自我挑戰組

30天打造自己的RSS閱讀器:Go語言與DevOps的實戰應用系列 第 23

Day 23:為 RSS 閱讀器 API 寫一個 Dockerfile

  • 分享至 

  • xImage
  •  

經過昨天對 Dockerfile 的全面了解,今天我們將實際動手為 RSS 閱讀器專案寫一個 Dockerfile。這個步驟對於將我們的專案成功部署到上線環境來說,是非常重要的。

Dockerfile 基本架構講解

首先,打開你的專案目錄,然後建立一個名為 Dockerfile 的檔案,內容講解如下:

第一步:指定 base

我們的專案是用 Go 語言開發的,所以我們會使用 Go 的官方 image 作為基底,再接續做我們的建置工作。這樣就不需要先設定 Go 編譯環境,很像 VM 的 virtual disk 檔案的概念。

FROM golang:1.20

第二步:設定工作目錄

指定一個容器內的工作目錄。如果有我們的 container 在執行期間有產生任何檔案,預設都會跑到這邊,當使用相對目錄呼叫指令時,也會先從此目錄開始尋找是否有符合的檔案,除非使用絕對路徑指定或是呼叫 cd 切換工作目錄。

WORKDIR /app

第三步:安裝依賴和複製源碼

複製你的專案 source code 到工作目錄並安裝必要的依賴。

COPY . . 
RUN go mod download

第四步:編譯專案

接著,編譯專案。

RUN go build -o main .

第五步:設定啟動命令

最後,設定當容器啟動時需要執行的命令。

CMD ["./main"]

完整的Dockerfile會看起來像這樣:

FROM golang:1.20
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o main .
CMD ["./main"]

建構和測試Docker映像檔

儲存好 Dockerfile,在專案根目錄打開終端機,執行以下命令來 build Docker image:

docker build -t rss-reader .

接著,你可以用以下命令來啟動一個容器來測試你的映像檔:

docker run --rm -p 8080:8080 rss-reader

改進

有注意到我們沒有清除掉 build cache 嗎?在 container image 的 best practice 中,其實是有建議要清掉任何在執行 container 時用不到的檔案的。

如何做到這一點?我們在剛剛的 dockerfile (有在那邊用 && 拼接一連串 apt-get 指令的應該知道這有多麻煩) 做點手腳,但前幾年 dockerfile 支援了 multi-stage build,我們之後可以善用此功能來減少我們修改 dockerfile 的 effort。

總結

經過今天的實作,我們應該已經有一個可運行的Docker映像檔,這個映像檔將為我們接下來的持續部署流程提供基礎。明天,我們將進一步研究如何在 GitHub Actions 中自動化這個建構過程。

有其他疑問或需要進一步的資訊,隨時與我聯繫。謝謝!


上一篇
Day 22:部署到上線環境的準備:什麼是 Dockerfile
下一篇
Day 24:發布 RSS 閱讀器映像檔到 GitHub Container Registry
系列文
30天打造自己的RSS閱讀器:Go語言與DevOps的實戰應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言